package com.his.service;

import com.baomidou.mybatisplus.extension.service.IService;

import com.his.entity.dto.*;
import com.his.entity.vo.RegisterVO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 挂号及退号Service接口
 * 
 * @author lixue
 * @date 2025-09-05
 */
public interface IRegisterService extends IService<Register>
{
    /**
     * 查询挂号及退号
     * 
     * @param id 挂号及退号主键
     * @return 挂号及退号
     */
    public Register selectRegisterById(Long id);

    /**
     * 查询挂号及退号列表
     * 
     * @param register 挂号及退号
     * @return 挂号及退号集合
     */
    public List<RegisterVO> selectRegisterList(Register register);

    /**
     * 新增挂号及退号
     * 
     * @param register 挂号及退号
     * @return 结果
     */
    public int insertRegister(Register register);

    /**
     * 修改挂号及退号
     * 
     * @param register 挂号及退号
     * @return 结果
     */
    public int updateRegister(Register register);

    /**
     * 批量删除挂号及退号
     * 
     * @param ids 需要删除的挂号及退号主键集合
     * @return 结果
     */
    public int deleteRegisterByIds(Long[] ids);

    /**
     * 删除挂号及退号信息
     * 
     * @param id 挂号及退号主键
     * @return 结果
     */
    public int deleteRegisterById(Long id);

    /**
     * 查询科室列表
     */
    List<Department> deptList();

    /**
     * 查询挂号级别列表
     */
    List<RegistLevel> levelList();

    /**
     * 查询医生排班列表
     */
    List<Employee> doctorScheduleList(Long deptId, Date visitDate, Long registerLevelId);

    /**
     * 查询结算类别列表
     */
    List<SettleCategory> settleCategoryList();


    /**
     * 查询排班已用号
     */
    Map<String, Integer> scheduleUsedQuota(Long deptId, Date visitDate, Long registLevelId);
}
